package fmu.pi.view.controllers;

import java.math.BigDecimal;
import java.net.URL;
import java.sql.SQLException;
import java.util.Map;
import java.util.ResourceBundle;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TableView;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;
import fmu.pi.business.AplicacaoBusiness;
import fmu.pi.business.MovimentacaoBusiness;
import fmu.pi.business.vo.MovimentacaoVO;
import fmu.pi.model.bean.Cartao;
import fmu.pi.utils.FXUtils;
import fmu.pi.utils.Utils;
import fmu.pi.view.draw.ChartsDrawer;

/**
 * @author valdir.c.junior
 * 
 * Classe que efetua o controle central da aplicação. 
 *
 */
public class MainController extends PaneController implements Initializable {

	// Business Objects //
	private MovimentacaoBusiness movimentacaoBO;
	private AplicacaoBusiness aplicacaoBO;
	
	//* Home *//
	@FXML private Label homeLMesAtual;
	@FXML private Label homeLMesPassado;
	@FXML private Label homeLMesRetrasado;
	@FXML private TextArea homeTADicas;
	@FXML private TextField homeTMesAtual;	
	@FXML private TextField homeTMesPassado;
	@FXML private TextField homeTMesRetrasado;
	
	//* Grupos *//
	@FXML private ListView<String> gruposLVListaGrupos;
	@FXML private Button gruposBtInsert;
	@FXML private Button gruposBtUpdate;
	@FXML private Button gruposBtDelete;
	@FXML private TextArea gruposTADicas;
	
	//* Contas *//
	@FXML private TextField contasTTotalAReceber;
	@FXML private TextField contasTTotalAPagar;
	@FXML private TextArea contasTADicas;
	
	//* Contas *//
	@FXML private TableView<Cartao> cartoesTBLValores;
	@FXML private TextArea cartoesTADicas;
	
	@FXML private FlowPane centerArea;
	
	/**
	 * Construtor
	 */
	public MainController() {
		super();
		movimentacaoBO = new MovimentacaoBusiness();
		aplicacaoBO = new AplicacaoBusiness();
		
	}

	/**
	 * @see javafx.fxml.Initializable#initialize(java.net.URL, java.util.ResourceBundle)
	 */
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {	
		renderHomeTab();
	}

	/**
	 * Método que renderiza a aba Grupo
	 */
	public void renderGroupsTab() {
		centerArea.getChildren().clear();
		centerArea.getChildren().add(new Label("Gráfico filtrado por grupos"));
	}
	
	/**
	 * Método que renderiza a aba Contas
	 */
	public void renderBillsTab() {
		centerArea.getChildren().clear();
		centerArea.getChildren().add(new Label("Gráfico filtrado por Contas"));
	}


	/**
	 * Método que renderiza a aba Cartoes de credito
	 */
	public void renderCreditCardsTab() {
		centerArea.getChildren().clear();
		centerArea.getChildren().add(new Label("Gráfico filtrado por Cartões"));
	}

	/**
	 * Método que renderiza a aba Lancamentos
	 */
	public void renderAppointmentTab() {
		centerArea.getChildren().clear();
		centerArea.getChildren().add(new Label("Gráfico filtrado por Lançamentos"));
	}

	/**
	 * Método que renderiza a aba Home
	 */
	public void renderHomeTab() {

		int mesAtual = Utils.mesAtual();
		
		Map<Integer, MovimentacaoVO> movimentacoes;
		
		try {
			movimentacoes = movimentacaoBO.obterMovimentacaoTrimestre();
			
			if (!movimentacoes.isEmpty()) {
				homeLMesAtual.setText(movimentacoes.get(mesAtual).getMes());
				homeLMesPassado.setText(movimentacoes.get(mesAtual-1).getMes());
				homeLMesRetrasado.setText(movimentacoes.get(mesAtual-2).getMes());
				
				FXUtils.setCurrencyValue(homeTMesAtual, movimentacoes.get(mesAtual).getValor());
				FXUtils.setCurrencyValue(homeTMesPassado, movimentacoes.get(mesAtual-1).getValor());
				FXUtils.setCurrencyValue(homeTMesRetrasado, movimentacoes.get(mesAtual-2).getValor());
				
			} else {
				homeLMesAtual.setText(Utils.nomeMes(mesAtual));
				homeLMesPassado.setText(Utils.nomeMes(mesAtual-1));
				homeLMesRetrasado.setText(Utils.nomeMes(mesAtual-2));
				
				FXUtils.setCurrencyValue(homeTMesAtual, new BigDecimal(0));
				FXUtils.setCurrencyValue(homeTMesPassado, new BigDecimal(0));
				FXUtils.setCurrencyValue(homeTMesRetrasado, new BigDecimal(0));
			}
			
			homeTADicas.setText(aplicacaoBO.getDicaHome());
			
			centerArea.getChildren().clear();
			centerArea.getChildren().add(new ChartsDrawer(movimentacaoBO).creatHomeChart());
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
